﻿using System.Windows;
using System.Windows.Input;
using Innvoice.Logica.GestorDB;
using Innvoice.Logica.GestorObject.Articulo;
using System.Collections.Generic;
using Innvoice.Ws.Clientes.Reportes;

namespace Innvoice.Ws.Articulos.Categorias
{
    /// <summary>
    /// Lógica de interacción para MostrarCategoria.xaml
    /// </summary>
    public partial class MostrarCategoria : Window
    {

        #region Property

        List<CategoriaArticulo> categoriasActivas = new List<CategoriaArticulo>();
        List<CategoriaArticulo> categoriasDesactivadas = new List<CategoriaArticulo>();
        ArticuloDB articuloDB;
        string textHelpDefault = "Pulse una opcion";

        #endregion

        #region Constructor

        public MostrarCategoria()
        {
            InitializeComponent();
            articuloDB = new ArticuloDB();
            
        }

        #endregion

        #region Methods Windows

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            categoriasActivas = articuloDB.ObtenerCategoriasDeArticulosSegunEstado(1);
            categoriasDesactivadas = articuloDB.ObtenerCategoriasDeArticulosSegunEstado(0);

            categoriaDataGridActivas.Items.Clear();
            categoriaDataGridActivas.ItemsSource = categoriasActivas;

            categoriaDataGridDesactivadas.Items.Clear();
            categoriaDataGridDesactivadas.ItemsSource = categoriasDesactivadas;
        }

        private void btnAgregar_Click(object sender, RoutedEventArgs e)
        {
            AgregarElemento();
        }

        private void btnModificar_Click(object sender, RoutedEventArgs e)
        {
            ModificarElemento();
        }

        private void btnModificar_MouseEnter(object sender, MouseEventArgs e)
        {
            textHelp.Text = "Solo puede modificar \nlas Categorias Activas";
        }
        private void btnModificar_MouseLeave(object sender, MouseEventArgs e)
        {
            textHelp.Text = textHelpDefault;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key.ToString().ToUpper())
            {
                case "F1":
                    AgregarElemento();
                    break;
                case "F2":
                    ModificarElemento();
                    break;
                case "F3":
                    DesactivarElemento();
                    break;
                case "F4":
                    Listar();
                    break;
                case "F12":
                    this.Close();
                    break;
                case "ESCAPE":
                    this.Close();
                    break;
                default:
                    return;
            }
        }

        private void btnCerarVentana_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnDesactivar_Click(object sender, RoutedEventArgs e)
        {
            DesactivarElemento();
        }

        #endregion

        #region Auxiliar Methods

        private void AgregarElemento()
        {
            AltaCategoria altaCategoria = new AltaCategoria();
            altaCategoria.Show();
        }

        private void ModificarElemento()
        {

            if (categoriaDataGridActivas.SelectedItems.Count == 1)
            {
                CategoriaArticulo categoria = (CategoriaArticulo)categoriaDataGridActivas.SelectedItem;
                ModificarCategoria modificarCategoria = new ModificarCategoria(categoria);
                modificarCategoria.Show();
            }
            else if (categoriaDataGridActivas.SelectedItems.Count < 1)
            {
                MessageBox.Show("Seleccione el elemento a modificar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Debe seleccionar SOLO UNA categoria a modificar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        //Borra el elemento seleccionado
        private void DesactivarElemento()
        {
            if (categoriaDataGridActivas.SelectedItems.Count == 1)
            {
                CategoriaArticulo auxCategoria = (CategoriaArticulo)categoriaDataGridActivas.SelectedItem;
                CategoriaArticulo categoria = articuloDB.ObtenerCategoriaDeArticulos(auxCategoria.Codigo); 

                List<Articulo> articulosDeLaCategoria = articuloDB.ObtenerArticulos(auxCategoria.Codigo);

                int cantidadArticulos = articulosDeLaCategoria.Count;

                string resultadoParaMessageBoxInicial = "Realmente desea desactivar la Categoria " + categoria.Descripcion + " ?\n";

                string resultadoMessageBoxFinal = resultadoParaMessageBoxInicial;

                if (cantidadArticulos > 0)
                {
                    string resultadoParaMessageBox = "";
                    int contador = 1;
                    foreach (Articulo item in articulosDeLaCategoria)
                    {
                        resultadoParaMessageBox = resultadoParaMessageBox + contador + " --> " + item.Descripcion + " \n";
                        contador++;
                    }
                    resultadoParaMessageBox = resultadoParaMessageBox + "\n";

                    resultadoMessageBoxFinal = resultadoMessageBoxFinal + "No estaran disponibles los siguientes Articulos (ni lo Sub Articulos que estos contengan)  si desactiva la Categoria: " + categoria.Descripcion + "\n" + resultadoParaMessageBox;
                }
                
                MessageBoxResult resultadoOK = MessageBox.Show(resultadoMessageBoxFinal, "Desactivar Categoria de los Articulos", MessageBoxButton.YesNoCancel, MessageBoxImage.Exclamation);
                
                switch (resultadoOK.ToString())
                {
                    case "Yes":
                        articuloDB.DesactivarCategoriaArticulo(categoria);
                        break;
                    default:
                        return;
                }
            }
            else if (categoriaDataGridActivas.SelectedItems.Count < 1)
            {
                MessageBox.Show("Seleccione el elemento a desactivar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Debe seleccionar SOLO UNA Categoria a desactivar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void Listar()
        {
            string miRdlc = "Innvoice.Ws.Articulos.Reportes.RptCategoriaArticulo.rdlc";
            string miNameDataSet = "DataSetCategoriaArticulo";
            List<CategoriaArticulo> listaCategorias = articuloDB.ObtenerCategoriasDeArticulos();
            FReporte rp = new FReporte(listaCategorias, miRdlc, miNameDataSet);
            rp.Show();
        }

        #endregion

        

        

        

        


    }
}